from arquivoCSV.Arquivo import ArquivoCSV
from campo.Campo import Campo

class Tabela():

    def __init__(self):

        self.nome           = ""
        self.numero_campos  = 0
        self.lista_tabelas  = []
        self.lista_campos   = []
        self.arquivo_csv    = ArquivoCSV()
        self.campo          = Campo()

    def __getattr__(self, name):

        if name == "nome":
            return self.nome
        
        elif name == "numero_campos":
            return self.numero_campos
        
        elif name == "lista_tabelas":
            return self.lista_tabelas
        
        elif name == "lista_campos":
            return self.lista_campos
                
        elif name == "arquivo_csv":
            return self.arquivo_csv
        
        elif name == "campo":
            return self.campo

        else:
            raise AttributeError, name


    def __setattr__(self, name, value):

        if name == "nome":
           self.__dict__["nome"]            = value

        elif name == "numero_campos":
            self.__dict__["numero_campos"]  = value
            
        elif name == "lista_tabelas":
            self.__dict__["lista_tabelas"]  = value

        elif name == "lista_campos":
            self.__dict__["lista_campos"]   = value            

        elif name == "arquivo_csv":
            self.__dict__["arquivo_csv"]    = value            
            
        elif name == "campo":
            self.__dict__["campo"]          = value            

        else:
            raise AttributeError, name
        
    def criaListaTabelas(self):

        tabela = ""
        lista_tabelas = []
        dados_arquivo = self.arquivo_csv.__getattr__('dados_arquivo')    
        
        for item in dados_arquivo[1:]:
            tabela = item[0]

            if tabela in lista_tabelas:
                pass

            else:
                lista_tabelas.append(item[0])
        
        self.__setattr__('lista_tabelas', lista_tabelas)


    def criaListaCampos(self, nome_tabela):
        
        lista_campos = []
        if self.__getattr__('lista_tabelas') != []:
            
            dados_arquivo = self.arquivo_csv.__getattr__('dados_arquivo')
            for item in dados_arquivo[1:]:

                if nome_tabela == item[0]:
                    campo = Campo()
                    campo.__setattr__('tabela', nome_tabela)
                    campo.__setattr__('nome', item[1])
                    campo.__setattr__('tipo', item[2])
        
                    campo = self.criaListaValores(campo, campo.__getattr__('tabela'), campo.__getattr__('nome'))
                    self.__setattr__('campo', campo)
                    lista_campos.append(self.__getattr__('campo'))
                                        
            self.__setattr__('lista_campos', lista_campos)

        else:
            self.__setattr__('lista_campos', lista_campos)


    def criaListaValores(self, campo, nome_tabela, nome_campo):
        
        valores = []
        if self.__getattr__('lista_tabelas') != []:
            
            dados_arquivo = self.arquivo_csv.__getattr__('dados_arquivo')    
            for item in dados_arquivo[1:]:
                
                if nome_tabela == item[0] and nome_campo == item[1] and item[3] != '':
                    valores = item[3]
                    campo.__setattr__('valores', valores)
            
                else:
                    campo.__setattr__('valores', valores)
        
        return campo
        
    def numCamposTabela(self, tabela):

        numero_campos = 0        
        if self.__getattr__('lista_tabelas') != []:
            
            dados_arquivo = self.arquivo_csv.__getattr__('dados_arquivo')    
            for item in dados_arquivo[1:]:

                if tabela == item[0]:
                    numero_campos = numero_campos + 1
                else:
                    pass

            self.__setattr__('numero_campos', numero_campos)
            
        else:
            self.__setattr__('numero_campos', numero_campos)
              
    
    def setupString(self, string):

        aux    = string
        aux = aux.replace('\'','')
        aux = aux.replace('\"','')
        aux = aux.replace('[','')
        aux = aux.replace(']','')
        aux = aux.strip()

        return aux
